﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Data;

using AcademiaEntidades;

namespace AcademiaDAO
{
    public class NivelCursoDAO
    {
        public static void Guardar(NivelCurso nivel) //Carga en la BD un nuevo Nivel del Curso
        {
            // SqlConnection cn = new SqlConnection("Data Source=MALDOXPPC\\sqlexpress;Initial Catalog=BD_Academia;Integrated Security=True");
            SqlConnection cn = null;

            if (nivel.IdNivelCurso > 0)
            {
                Modificar(nivel);
            }
            else
            {
                try
                {
                    cn = AccesoDato.Conectar();
                    SqlCommand cmd = new SqlCommand("insert into NivelCurso (Nivel, Modalidad, Cupo, Modulos) values (@nivel, @modalidad, @cupo, @modulos)", cn);

                    cmd.Parameters.AddWithValue("@nivel", nivel.Nivel);
                    cmd.Parameters.AddWithValue("@modalidad", nivel.Modalidad);
                    cmd.Parameters.AddWithValue("@cupo", nivel.Cupo);
                    cmd.Parameters.AddWithValue("@modulos", nivel.Modulos);
                    cn.Open();
                    int res = cmd.ExecuteNonQuery();
                    if (res != 1)
                    {
                        throw new Exception("No se pudo guardar el nivel de curso");
                    }
                }

                catch (SqlException e)
                {
                    throw new Exception("No se pudo guardar el nivel de curso");
                }

                finally
                {
                    if (cn != null && cn.State == ConnectionState.Open)
                    {
                        cn.Close();
                    }
                }
            }
        }//Fin del Método Guardar...

        public static void darDeBaja(int idNivelCurso) //Elimina un Nivel de Curso mediante el id!!!
        {
            // SqlConnection cn = new SqlConnection("Data Source=MALDOXPPC\\sqlexpress;Initial Catalog=BD_Academia;Integrated Security=True");
            SqlConnection cn = AccesoDato.Conectar();
            // SqlCommand cmd = new SqlCommand();
            string sql = "delete from NivelCurso where IdNivelCurso = @idNivelCurso ";
            SqlCommand cmd = new SqlCommand(sql, cn);
            cmd.Parameters.AddWithValue("@idNivelCurso", idNivelCurso);
            // cmd.Connection = cn;

            try
            {
                cn.Open();
                // cmd.CommandText = sql;
                int res = cmd.ExecuteNonQuery();
                if (res != 1)
                {
                    throw new Exception("No se pudo eliminar el nivel de curso");
                }
            }

            catch (SqlException ex)
            {
                throw new Exception("No se pudo eliminar el nivel de curso");
            }
            finally
            {
                if (cn != null && cn.State == ConnectionState.Open)
                {
                    cn.Close();
                }
            }
        }//Fin del Método darDeBaja...

        // Tendría que estar implementado con el guardar
        // Para ahorrar tiempo, en guardar se verifica si el id es distinto de 0 y se llama a este método
        private static void Modificar(NivelCurso nivel)
        {
            // SqlConnection cn = new SqlConnection("Data Source=MALDOXPPC\\sqlexpress;Initial Catalog=BD_Academia;Integrated Security=True");
            SqlConnection cn = AccesoDato.Conectar();

            string sql = "UPDATE NivelCurso ";
            sql += "SET Nivel = @nivelCurso, Modalidad = @modalidad , Cupo = @cupo, Modulos = @modulos WHERE IdNivelCurso = @idnivelcurso ";

            SqlCommand cmd = new SqlCommand(sql, cn);

            cmd.Parameters.AddWithValue("@idnivelcurso", nivel.IdNivelCurso);
            cmd.Parameters.AddWithValue("@nivelCurso", nivel.Nivel);
            cmd.Parameters.AddWithValue("@modalidad", nivel.Modalidad);
            cmd.Parameters.AddWithValue("@cupo", nivel.Cupo);
            cmd.Parameters.AddWithValue("@modulos", nivel.Modulos);

            // cmd.Connection = cn;
            try
            {
                cn.Open();
                // cmd.CommandText = sql;
                int res = cmd.ExecuteNonQuery();
                if (res != 1)
                {
                    throw new Exception("No se pudo modificar el nivel de curso");
                }
            }
            catch (SqlException ex)
            {
                throw new Exception("No se pudo modificar el nivel de curso");
            }

            finally
            {
                if (cn != null && cn.State == ConnectionState.Open)
                {
                    cn.Close();
                }
            }
        }//Fin del Método Modificar...

        public static List<NivelCurso> Consultar(string nivel, string modalidad)
        {
            List<NivelCurso> listaNivel = new List<NivelCurso>();
            SqlConnection cn = null;
            try
            {
                // SqlConnection cn = new SqlConnection("Data Source=MALDOXPPC\\sqlexpress;Initial Catalog=BD_Academia;Integrated Security=True");
                cn = AccesoDato.Conectar();
                SqlCommand cmd = new SqlCommand();
                // cn.Open();
                string sql = "select IdNivelCurso, Nivel, Modalidad, Cupo, Modulos FROM NivelCurso where 1=1 ";

                //if (nivel != "" && nivel != null)
                if (!string.IsNullOrEmpty(nivel))
                {
                    sql += "AND Nivel LIKE @nivel ";
                    cmd.Parameters.AddWithValue("@nivel", '%' + nivel + '%');
                }

                if (!string.IsNullOrEmpty(modalidad))
                {
                    sql += "AND Modalidad LIKE @modalidad ";
                    cmd.Parameters.AddWithValue("@modalidad", '%' + modalidad + '%');
                }

                cmd.Connection = cn;
                cmd.CommandText = sql;

                cn.Open();
                SqlDataReader dr = cmd.ExecuteReader();

                while (dr.Read())
                {
                    NivelCurso nc = new NivelCurso();

                    /*niveles.IdNivelCurso = int.Parse(dr["IdNivelCurso"].ToString());
                    niveles.Nivel = dr["nivel"].ToString();
                    niveles.Modalidad = dr["Modalidad"].ToString();
                    niveles.Cupo = int.Parse(dr["cupo"].ToString());
                    niveles.Modulos = int.Parse(dr["modulos"].ToString());*/

                    nc.IdNivelCurso = dr.GetInt32(0);
                    nc.Nivel = dr.GetString(1);
                    // modalidad puede ser null
                    nc.Modalidad = null;
                    if (!dr.IsDBNull(dr.GetOrdinal("Modalidad")))
                    {
                        nc.Modalidad = dr.GetString(2);
                    }
                    nc.Cupo = dr.GetInt32(3);
                    nc.Modulos = dr.GetInt32(4);
                    listaNivel.Add(nc);
                }

                dr.Close();
                return listaNivel;
            }
            catch (SqlException e)
            {
                throw new Exception("No se pudo obtener los niveles de curso");
            }

            finally
            {
                if (cn != null && cn.State == ConnectionState.Open)
                {
                    cn.Close();
                }
            }
        }//fin del Método Consultar...

        public static NivelCurso DevolverPorID(int idNivelCurso)
        {
            NivelCurso nivel = new NivelCurso();
            // SqlConnection cn = new SqlConnection("Data Source=MALDOXPPC\\sqlexpress;Initial Catalog=BD_Academia;Integrated Security=True");
            SqlConnection cn = AccesoDato.Conectar();
            SqlCommand cmd = new SqlCommand("Select idnivelcurso,nivel,modalidad,cupo, modulos from NivelCurso where idnivelcurso=@idnivelcurso ", cn);

            try
            {
                cn.Open();
                cmd.Parameters.AddWithValue("@idnivelcurso", idNivelCurso);
                SqlDataReader dr = cmd.ExecuteReader();
                while (dr.Read())
                {
                    nivel.IdNivelCurso = int.Parse(dr["idnivelcurso"].ToString());
                    nivel.Cupo = int.Parse(dr["cupo"].ToString());
                    nivel.Modulos = int.Parse(dr["modulos"].ToString());
                    nivel.Nivel = dr["nivel"].ToString();
                    nivel.Modalidad = null;
                    if (dr["modalidad"] != DBNull.Value)
                    {
                        nivel.Modalidad = dr["modalidad"].ToString();
                    }
                }
                dr.Close();
                // cn.Close();
                return nivel;
            }
            catch (SqlException ex)
            {
                throw new Exception("No se pudo obtener el nivel de curso");
            }
            finally
            {
                if (cn != null && cn.State == ConnectionState.Open)
                {
                    cn.Close();
                }
            }
        }

        public static List<NivelCurso> ConsultarTodos()
        {
            // se reutiliza el metodo consultar con los filtros
            return Consultar(null, null);
        }

        // Hace lo mismo que el consultar
        /* public List<NivelCurso> ConsultarTodos()
        {

            List<NivelCurso> listaNivel = new List<NivelCurso>();
            SqlConnection cn = new SqlConnection("Data Source=MALDOXPPC\\sqlexpress;Initial Catalog=BD_Academia;Integrated Security=True");
            SqlCommand cmd = new SqlCommand("select IdNivelCurso,nivel, modalidad,cupo, modulos from NivelCurso", cn);

            try
            {

                cn.Open();

                SqlDataReader dr = cmd.ExecuteReader();

                while (dr.Read())
                {
                    NivelCurso niveles = new NivelCurso();

                    niveles.IdNivelCurso = int.Parse(dr["IdNivelCurso"].ToString());
                    niveles.Nivel = dr["nivel"].ToString();
                    niveles.Modalidad = dr["Modalidad"].ToString();
                    niveles.Cupo = int.Parse(dr["cupo"].ToString());
                    niveles.Modulos = int.Parse(dr["modulos"].ToString());

                    listaNivel.Add(niveles);

                }

                dr.Close();

            }

            catch (Exception e)
            {
                throw; // new Exception("No se pudieron obtener los datos...");
            }

            finally
            {
                cn.Close();
            }

            return listaNivel;
        }//fin del Método Consultar...

        */
    }
}
